#include "stdafx.h"
#include "Solver2D.h"
#include <iostream>
#include <fstream>
#include "World.h"
#include "Analyzer.h"
#include <map>

#include "PointToRigidBodyHashTable.h"

//Int2 ReadFile(std::ifstream* file)
//{
//	std::vector<std::string> buffer;
//	int cols = 0;
//	
//	
//	if(file->is_open())
//	{
//		while(file->good())
//		{
//			std::string line;
//			std::getline(*file, line);
//			if(!cols)
//				cols = line.length();
//			if(line.length() > 0)
//				buffer.push_back(line);
//		}
//	}
//	file->close();
//	
//	int rows = buffer.size();
//
//	Int2 result(boost::extents[rows][cols]);
//
//	for(int row = 0; row < rows; ++row)
//	{
//		std::string tmp = buffer[row];
//		for(int col = 0; col < cols; ++col)
//		{
//			result[row][col] = (tmp[col] == '0' ? 0 : 1);
//		}
//	}
//
//	return result;
//}
//
//btAlignedObjectArray<btVector3> vertexes;
//
//
//void TestHull()
//{
//	const int n = 8;
//	btVector3 tab[n];
//
//	tab[0] = btVector3(-1,-1,-1);
//	tab[1] = btVector3(-1,-1,1);
//	tab[2] = btVector3(1,-1,-1);
//	tab[3] = btVector3(1,-1,-1);
//	tab[4] = btVector3(-1,1,-1);
//	tab[5] = btVector3(-1,1,1);
//	tab[6] = btVector3(1,1,-1);
//	tab[7] = btVector3(1,1,-1);
//
//	btConvexHullShape s;
//	for(int i = 0; i < n; ++i)
//		s.addPoint(tab[i]);
//	
//	btVector3 aabbMin(0,0,0), aabbMax(0,0,0);
//	s.getAabb(btTransform(), aabbMin, aabbMax);
//	btShapeHull hull(&s);
//	hull.buildHull(s.getMargin());
//	
//
//	std::cout << "AABB: " << std::endl;
//	std::cout << "\t" << aabbMin.getX() << "\t" << aabbMin.getY() << "\t" << aabbMin.getZ() << std::endl;
//	std::cout << "\t" << aabbMax.getX() << "\t" << aabbMax.getY() << "\t" << aabbMax.getZ() << std::endl;
//	std::cout << "Trojkaty: " << hull.numTriangles() << std::endl;
//	std::cout << "Wierzcholki: " << hull.numVertices() << std::endl;
//
//	//btConvexHullShape s2(hull.getVertexPointer(), hull.numVertices());
//	
//	system("pause");
//}
//
//int _tmain(int argc, _TCHAR* argv[])
//{
//	//btPrimitiveTriangle pt1, pt2;
//	//
//
//	//btVector3 v1(0,0,0);
//	//btVector3 v2(1,1, 0);
//	//btVector3 v3(1,0,0);
//	//btVector3 v4(2, 0, 0);
//	//btVector3 v5(-1, 0, -1);
//	//btVector3 v6(1,0, -1);
//
//	//pt1.m_vertices[0] = v1;
//	//pt1.m_vertices[1] = v2;
//	//pt1.m_vertices[2] = v3;
//	//
//	//pt2.m_vertices[0] = v2;
//	//pt2.m_vertices[1] = v3;
//	//pt2.m_vertices[2] = v4;
//	//pt1.m_margin = 0.01f;
//	//pt1.buildTriPlane();
//	//pt2.buildTriPlane();
//	//GIM_TRIANGLE_CONTACT coc;
//	//pt1.find_triangle_collision_clip_method(pt2, coc);
//	//
//	//pt1.overlap_test_conservative(pt2);
//
//	//return 0;
//	//std::ifstream file;
//	//file.open(argv[1]);
//
//	//Int2 input = ReadFile(&file);
//
//	World w;
//	
//	btTransform transform = btTransform::getIdentity();
//	transform.setOrigin(btVector3(4,4,4));
//	btQuaternion quat;
//	quat.setEuler(0,45,45);
//	transform.setRotation(quat);
//	w.AddBox(btVector3(.5,.5,.5), transform);
//	transform.setOrigin(btVector3(5,2,2));
//
//	//w.AddBox(btVector3(.5,.5,.5), transform);
//	//w.AddSphere(3, transform);
//
//	//transform.setOrigin(btVector3(5,5,5));
//	
//	//transform.setRotation(quat);
//	//w.AddBox(btVector3(1,1,1), transform);
//
//	Analyzer analyzer(&w, btVector3(0,0,0), btVector3(8,5,5));
//	try
//	{
//		analyzer.Run();
//	}
//	catch(...)
//	{
//		std::cout << "Wyjatek w glownej petli" << std::endl;
//	}
//
//	//analyzer.PrintResult1();
//	//btConvexHullShape hull;
//
//	//for(int i = 0; i < input.shape()[0]; ++i)
//	//{
//	//	for(int j = 0; j < input.shape()[1]; ++j)
//	//	{
//	//		if(input[i][j] > 0)
//	//		{
//	//			hull.addPoint(btVector3(i,j,i%j));
//	//		}
//	//	}
//	//}
//
//	//int n = hull.getNumVertices();
//	//int m = hull.getNumPoints();
//	//btVector3 a,b;
//	//int e = hull.getNumEdges();
//	//bool b1 = hull.isPolyhedral();
//	//const btConvexPolyhedron* p = (hull.getConvexPolyhedron());
//	//btConvex2dShape hull2(&hull);
//	//
//	//for(int i = 0; i < e; ++i)
//	//{
//	//	hull.getEdge(i, a, b);
//	//	std::cout << "( " << a.getX() << " , " << a.getY() << ") : ( " << b.getX() << " , " << b.getY() << " )" << std::endl;
//	//}
//	//
//	/*Solver2D solver( input );
//	solver.Run();
//	solver.PrintResults();*/
//	//system("pause");
//	return 0;
//}